package Day16.abstact_;

/**
 * @author HYHwtx
 * @version 1.0
 * @date 2022/2/23 11:38
 */
/*
* 抽象类
*
* 当父类的某些方法需要声明，但又不确定如何实现，
* 可以将其声明为抽象方法，那么这个方法所在的类就是抽象类
*
* 介绍：
* 1.abstract关键字来修饰一个类的时候，这个类就叫做抽象类；
* 访问修饰符 abstract 类名{
* }
* 2.用abstract关键字修饰一个方法，那么这个方法就是抽象方法
* 访问修饰符 abstract 返回类型 方法名（参数列表）;没有方法体
*
* 3.抽象类的价值更多作用在设计，是设计者设计好，让子类继承并且实现抽象类
*
* 4.抽象类：是面试官喜欢问的知识点，在框架和设计模式中使用较多
*
* 细节：
* 1.抽象类不能被实例化；
* 2.抽象类不一定要包含abstract方法，也就是说，他可以没有abstract方法
* 3.一旦类包含了abstract方法，这个类必须是abstract类
* 4.abstract只修饰类和方法，不能修饰属性和其他的。
*
 * */
public class Abstract01 {
}
/*
class  Animal{
    private String name;
    private int age;

    public Animal(String name, int age) {
        this.name = name;
        this.age = age;
    }
    //eat行为

    public  void eat(){
        System.out.println("这是一个动物，但是不清楚目前吃什么！");
    }
}*/
abstract class  Animal{
   private String name;


    public Animal(String name) {
        this.name = name;
    }
  /*  这里的eat实现了，但没有意义。
    即，父类方法不确定的问题
    1.考虑该方法设计为抽象方法
    2.所谓抽象方法就是没有实现的方法
    3.所谓当中没有实现就是指没有方法体；
    4.当一个类存在抽象方法的时候，需要将该类声明为抽象类
    5.一般而言，抽象类会继承，由其子类来实现抽象方法；
    */
//    public  void eat(){
//        System.out.println("这是一个动物，但是不清楚目前吃什么！");
//    }
    public abstract void eat();
}
